package study.sharding.spring.support.routing;

import lombok.extern.slf4j.Slf4j;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

import java.util.Map;
/**
 * 动态数据源
 */
@Slf4j
public class RoutingDataSource extends AbstractRoutingDataSource {

    @Override
    public void setTargetDataSources(Map<Object, Object> dataSources) {
        //
        super.setTargetDataSources(dataSources);
        //将数据源的 key 放到数据源上下文的 key 集合中，用于判断数据源是否合法
        DataSourceKeyHolder.addKeys(dataSources.keySet());
    }

    @Override
    protected Object determineCurrentLookupKey() {
        //获取数据源 key 并返回
        String key = DataSourceKeyHolder.getKey();
        log.info(">>>>>>>>>>> Use DataSource [{}]", key);
        return key;
    }
}
